import {
    createRouter,
    createWebHistory
} from "vue-router"

import Admin from "~/layouts/admin.vue"
import Index from '~/pages/index.vue'
import Login from '~/pages/login.vue'
import NotFound from '~/pages/404.vue'
import GoodsList from '~/pages/goods/list.vue'
import CategoryList from '~/pages/category/list.vue'
import UserList from '~/pages/user/list.vue'
import OrderList from '~/pages/order/list.vue'
import CommentList from '~/pages/comment/list.vue'
import ImageList from '~/pages/image/list.vue'
import NoticeList from '~/pages/notice/list.vue'
import SettingBase from '~/pages/setting/base.vue'
import CouponList from '~/pages/coupon/list.vue'
import ManagerList from '~/pages/manager/list.vue'
import AccessList from '~/pages/access/list.vue'
import RoleList from '~/pages/role/list.vue'
import SkusList from '~/pages/skus/list.vue'

// 默认路由，所有用户共享
const routes = [{
    path: "/",
    name:"admin",
    component: Admin,
    
}, {
    path: "/login",
    component: Login,
    meta:{
        title:"后台登录"
    }
}, {
    path: "/:pathMatch(.*)*",
    name:"NotFound",
    component: NotFound
}]

// 动态路由，用于匹配菜单动态生成路由
const asyncRoutes = [
    {
            path: "/goods/list",
            name:"/goods/list",
            component: GoodsList,
            meta:{
                title:"商品管理"
            }
        },{
            path: "/category/list",
            name:"/category/list",
            component: CategoryList,
            meta:{
                title:"分类管理"
            }
        },{
            path: "/",
            name:"/",
            component: Index,
            meta:{
                title:"后台首页"
            }
        },{
            path: "/user/list",
            name:"/user/list",
            component: UserList,
            meta:{
                title:"用户列表"
            }
        },{
            path: "/order/list",
            name:"/order/list",
            component: OrderList,
            meta:{
                title:"订单列表"
            }
        },{
            path: "/comment/list",
            name:"/comment/list",
            component: CommentList,
            meta:{
                title:"评价列表"
            }
        },{
            path: "/image/list",
            name:"/image/list",
            component: ImageList,
            meta:{
                title:"图库列表页"
            }
        },{
            path: "/notice/list",
            name:"/notice/list",
            component: NoticeList,
            meta:{
                title:"公告列表"
            }
        },{
            path: "/setting/base",
            name:"/setting/base",
            component: SettingBase,
            meta:{
                title:"配置列表"
            }
        },{
            path: "/coupon/list",
            name:"/coupon/list",
            component: CouponList,
            meta:{
                title:"优惠券列表"
            }
        },{
            path: "/manager/list",
            name:"/manager/list",
            component: ManagerList,
            meta:{
                title:"管理员列表"
            }
        },{
            path: "/access/list",
            name:"/access/list",
            component: AccessList,
            meta:{
                title:"菜单权限列表"
            }
        },{
            path: "/role/list",
            name:"/role/list",
            component: RoleList,
            meta:{
                title:"角色管理"
            }
        },{
            path: "/skus/list",
            name:"/skus/list",
            component: SkusList,
            meta:{
                title:"规格管理"
            }
        }
]


export const router = createRouter({
    history: createWebHistory(),
    routes
})

// 动态添加路由
export function addRoutes(menus){
    // 是否有新的路由
    let hasNewRoutes = false
    const findAndAddRoutersByMenus = (arr) => {
        arr.forEach(e=>{
            let item = asyncRoutes.find(o=>o.path == e.frontpath)
            if(item && !router.hasRoute(item.path)){
                router.addRoute("admin",item)
                hasNewRoutes = true
            }
            if(e.child && e.child.length > 0){
                findAndAddRoutersByMenus(e.child)
            }
        })
    }
    findAndAddRoutersByMenus(menus) 

    return hasNewRoutes
}